Effective-Objective-C读书笔记(4)

协议与分类

第23条:通过委托与数据源协议进行对象间通信

  • 如果有必要,可以实现含有位段的结构体,将委托对象能否响应相关协议方法这一信息缓存其中。

第24条:使用分类来分散代码

  • 使用分类将类的实现代码划分为易于管理的小块
  • 将视为“私有”的方法归入叫 Private 的分类中,隐藏实现细节。

第25条:为第三方分类添加前缀

  • 向第三方类中添加分类时,应该给其名称、方法名添加专用的前缀。

第26条:不要在分类中添加属性

  • 尽量不要在分类中添加属性,因为属性是为了封装数据的。而分类目的在于扩展类的功能,而非封装数据。
  • 虽然这样定义,但是也可以在分类当中创建只读属性。
1
2
3
@interface NSCalendar (EOCCalandar)
@property (nonatomic, strong, readonly) NSArray *eoc_allMonths;
@end

第27条:使用匿名分类(或者说称为扩展)来隐藏实现细节

  • 通过匿名分类,把私有的方法、属性声明在匿名分类中。
  • 若某属性在主接口中声明为 “readonly”,类内部又要用设置方法修改此属性,可以在匿名分类中将其扩展为 “readwrite”。

第28条:通过协议提供匿名对象

  • 提供协议来隐藏具体类内部的实现。
  • 具体的对象类型可以淡化为遵从某协议的 id 类型,协议里规定了对象所应该实现的方法,可以使用匿名对象来表示。